https://movie.naver.com/movie/bi/mi/point.nhn?code=161967에서 모든 평점을 불러온 후 워드클라우드 와 데이터 시각화를 통한 분석
url <- "https://movie.naver.com/movie/bi/mi/pointWriteFormList.nhn?code=161967&type=after&isActualPointWriteExecute=false&isMileageSubscriptionAlready=false&isMileageSubscriptionReject=false&page="
rating <- c()
review <- c()
date <- c()
#2929
for (i in 1:2929) {
if (i %% 500 == 0) {print(i)}
html <- read_html(paste0(url,i))
html %>%
html_node(".score_result") %>%
html_nodes("li") -> lis
for (li in lis) {
rating <- c(rating, html_node(li, '.star_score') %>% html_text('em') %>% trim())
li %>%
html_node('.score_reple') %>%
html_text('p') %>%
trim() -> tmp
idx <- str_locate(tmp, "\r")
review <- c(review, str_sub(tmp, 1, idx[1]-1))
tmp <- trim(str_sub(tmp, idx[1], -1))
idx <- str_locate(tmp, "\r")
writer <- c(writer, str_sub(tmp, 1, idx[1]-1))
tmp <- trim(str_sub(tmp, idx[1], -1))
idx <- str_locate(tmp, "\r")
date <- c(date, str_sub(tmp, 1, idx[1]-1))
#print(time)
}
}
2929번 돌린 loop에서 나온 변수들을 data frame 으로 저장 시켜준다.
df.review <- data.frame(rating = rating, user_review = review, date = date)
# 이후 영화 변수명의 편리를 위해 변수명을 바꾸어 준다.
df_naver.review <- df.review
head(df_naver.review)
## data frame with 0 columns and 0 rows
Library 준비
library(wordcloud2)
library(KoNLP)
## Checking user defined dictionary!
Word Cloud 생성 과정
#write(review, "naver_review1.txt")
#data <- readLines('naver_review.txt')
#data1 <- sapply(data, extractNoun, USE.NAMES = F)
#data3 <- unlist(data1)
#data3 <- gsub("\\d+","",data3) ## 숫자 없애기
#data3 <- Filter(function(x) {nchar(x) >= 2}, data3) #2글자 이상 필터
#data4 <- str_replace_all(data3, "[^[:alpha:]]","") #한글, 영어이외는 삭제
#txt2 <- readLines("네이버영화gsub.txt")
#for(i in 1:length(txt2)) {
# data5 <- gsub(txt2[i],"",data4)
#}
#txt2[1]
#data5 <- gsub("영화","",data5)
#data5 <- gsub("관람객","",data5)
#write(data5,"parasite_Naver2.txt")
data6 <- read.table("parasite_Naver2.txt")
nrow(data6)
wordcount <- table(data6)
wordcloud <-sort(wordcount,decreasing = T)
#head(wordcloud)
wordcloud2(wordcloud)
setwd(“d:/workspace/R_Crawling/Project/Movie_website_comparison+Parasite”)
# Plot of user rating and time to see how the user rating went as the movie came out
library(ggplot2)
#theme_set(theme_classic()) # change the theme to my preferece
#View(df_naver.review)
df_naver.review$rating <- as.numeric(as.character(df_naver.review$rating))
df_naver.review$date <- substr(df_naver.review$date,1,10)
df_naver.review$time <- substr(df_naver.review$date_time,12,16)
df_naver.review$hour <- substr(df_naver.review$date_time,12,13)
names(df_naver.review) <- c("rating" , "user_review", "date_time" , "date" , "time" )
#View(df_naver.review)
time.sort <- df_naver.review %>%
select(rating,date) %>%
group_by(date) %>%
summarise(review_mean = mean(as.numeric(rating)))
#View(time.sort)
df_naver.review$date <-as.Date(df_naver.review$date, "%Y.%m.%d")
# line Plot of rating per day from release date
naver.P1 <- ggplot(time.sort,aes(x = date, y = review_mean,group = 1)) +
geom_point() +
geom_line(color = "blue") +
ggtitle("[네이버] 개봉 이후 날짜별 네티즌 평점 변화 그래프") +
theme(axis.text.x = element_text(size = 8, angle = 90)) +
theme(plot.title = element_text(face = "bold", hjust = 0.5, size = 15, color = "darkblue")) +
ylab("평점") + xlab("")
> 평점은 주로 8.0점에서 9.0점 사이에 있다는 것을 볼 수있다. 더 자세한 분석은 아래 다음 사이트와 함꼐 다룬다.
# bar graph of time and review
df_naver.review$hour <- substr(df_naver.review$time,1,2)
df_naver.review$time
sort.byTime <- df_naver.review %>%
select(rating,time,hour) %>%
group_by(hour)%>%
summarise(rating = mean(rating))
class(sort.byTime$hour)
sort.byTime$hour <- as.numeric(sort.byTime$hour)
View(sort.byTime)
ggplot(sort.byTime,aes(hour,rating,group=1)) + geom_point() + geom_line(color="red") +
ggtitle("[네이버] 개봉 이후 시간별 네티즌 평점 변화 그래프") +
theme(plot.title = element_text(face = "bold", hjust = 0.5, size = 15, color = "darkblue"))
#### 5시와 6시 사이에 가장 낮은 8.0에 가까운 평점을 보이며 자세한 분석은 아래 [다음]영화와 같이 비교 분석 되어있다.
# bar graph of day and num of people who wrote reviews
sort.byPeople <- df_naver.review %>%
select(rating,date,time) %>%
group_by(date) %>%
summarise(Count = n(), Rating = mean(rating))
View(sort.byPeople)
firstday <- sort.byPeople$Count[1]
firstday
ps.release.date <- as.Date("2019-05-30","%Y-%m-%d")
ggplot(sort.byPeople, aes(date,Count,fill=Rating,)) + geom_col() +
scale_fill_gradient(low="blue", high="red") + ggtitle("[네이버] 기생충 날짜별 네티즌 리뷰 건수") +
theme(plot.title = element_text(face = "bold", hjust = 0.5, size = 15, color = "darkblue")) +
geom_vline(xintercept = ps.release.date, linetype="dashed", color = "red",label = "Release Date") +
geom_label(aes(x=sort.byPeople$date[1], label="개봉일 \n 3340 명", y=3800), colour="black", size = 2.8,fill = "white")
날짜별 리뷰_naver
다음 영화 기생충 Word Cloud
네이버 영화 기생충 Word Cloud
IMDB Word Cloud